/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package crawler;

/**
 *
 * @author pablo
 */
import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.swing.text.AbstractDocument;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.html.HTML;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLEditorKit;

class LeeFichero {

    public static void main(String[] arg) {
        File archivo = null; // creo un objeto de tipo archivo, este objeto me permite manejar los archivos (borrar, editar, leer, mover, etc)
        FileReader fr = null; // creamos un objeto para poder leer el archivo.
        BufferedReader br = null; // creamos el buffer para almacenar todo lo que leamos del archivo

        try {
            // Apertura del fichero y creacion de BufferedReader para poder
            // hacer una lectura comoda (disponer del metodo readLine()).
            archivo = new File("C:\\paginas\\temp.html"); // crea el archivo en el disco duro
            fr = new FileReader(archivo); // me permite leer el archivo
            br = new BufferedReader(fr); // me permite almacenar lo que lei en el archivo

            // Lectura del archivo temporal
            String linea;
            while ((linea = br.readLine()) != null) {
                //System.out.println(linea);
                getLink(linea);
            }


        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // En el finally cerramos el fichero, para asegurarnos
            // que se cierra tanto si todo va bien como si salta 
            // una excepcion.
            try {
                if (null != fr) {
                    fr.close();
                    ////////////////////////////////////////////////////////////////  archivo.deleteOnExit(); // borra el archivo una vez que termina de leerlo
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }


    }
    public static int contadorThread = 0;

    public static List<String> getLink(String texto) { // extrae los URLs del codigo HTML del archivo temporal

        List<String> result = new ArrayList(); // creamos el objeto tipo ArrayList, me permite revisar los
        // URLs dentro un codigo.
        try {
            HTMLEditorKit kit = new HTMLEditorKit(); // se crea un objeto que interpreta el codigo HTML
            HTMLDocument doc = (HTMLDocument) kit.createDefaultDocument(); // crea un documento virtual en memorial
            // donde se va a revisar la informacion que se extra del temporal
            doc.putProperty("IgnoreCharsetDirective", Boolean.TRUE);
            StringReader sr = new StringReader(texto); // objeto que me permite leer cadenas de texto
            kit.read(sr, doc, 0); // leer la lineas que estan en el doc y las pone en memoria

            HTMLDocument.Iterator it = doc.getIterator(HTML.Tag.LINK); // crea el iterador y va a buscar todas las
            // veces que aparesca la etiqueta LINK dentro del HTML

            while (it.isValid()) {
                AbstractDocument.AbstractElement s = (AbstractDocument.AbstractElement) it.getAttributes();

                String link = (String) s.getAttribute(HTML.Attribute.HREF);
                if (link != null) {
                    // Agregamos el resultado a la lista
                    if (link.indexOf("localhost") <= 0) {
                        result.add(link);
                        //  System.out.println(link);
                        contadorThread = contadorThread + 1;//cuenta la cantidad de URL's encontrados en el codigo HTML
//                            System.out.println("contador link:"+contadorThread);
                    }//if
                }//if
                it.next();
            }//while
            getALink(texto, result);




        }//try
        catch (Exception ex) {
            System.out.println(ex);
            return null;
        }//catch


        return result;




    }//getLinks

    public static List<String> getALink(String texto, List<String> result) {
        //List<String> result = new ArrayList();
        try {
            HTMLEditorKit kit = new HTMLEditorKit();
            HTMLDocument doc = (HTMLDocument) kit.createDefaultDocument();
            StringReader sr = new StringReader(texto);
            kit.read(sr, doc, 0);
            // Encontramos todos los  elementos A en el documento (que debería tener elementos HTML)
            HTMLDocument.Iterator it = doc.getIterator(HTML.Tag.A);
            while (it.isValid()) {

                SimpleAttributeSet s = (SimpleAttributeSet) it.getAttributes();
                String link = (String) s.getAttribute(HTML.Attribute.HREF);
                if (link != null) {
                    // Agregamos el resultado a la lista
                    if (link.indexOf("localhost") <= 0) {
                        result.add(link);
                    }
                    //  System.out.println("link obtenido: "+link);
                    contadorThread = contadorThread + 1;//cuenta la cantidad de URL's encontrados en el codigo HTML
                    //  System.out.println("contador ALink: "+contadorThread);
                }
                it.next();
            }
            recorrerLista(result);
        } catch (Exception ex) {
            //Solamente nos comemos la excepción
            return null;
        }
        return result;
    }

    public static void recorrerLista(List<String> lista) {


        int i = 0;
        Iterator iter = lista.iterator();
        i = i + 1;
        while (iter.hasNext()) {
            String objeto = (String) iter.next();
           // System.out.println(iter.next());
            Hilo h = new Hilo(objeto);
            h.ValidarURL();
//            Thread tread = new Thread(h);
//            tread.start();
        }
    }
}
